/**
 * 给定K1和K2，要求找到一个数N，使得在两种进制下数位均小于等于一。
 * 考虑用大的数，从10和11开始，每次扩展出两个数，这样K2肯定符合，然后再看满不满足K1即可。
 * 对于2^64方范围，当K2==8时，搜索空间为2^16，完全足够。其实7也足够。
 * 对于K2小于7的情况，可以打表。
 * 但是恰好第一个无解的情况是(7, 4)，且7以下的解均可以很快搜出。
 * 因此统一写成一个BFS即可。
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;

llt K1, K2;

bool isOK(__int128_t x){
    while(x){
        if(x % K1 > 1) return false;
        x /= K1;
    }
    return true;
}

void work(){
    cin >> K1 >> K2;
    __int128_t k1, k2;
    k1 = K1, k2 = K2;
    queue<__int128_t> Q;
    Q.push(k2);
    Q.push(k2 + 1);
    while(not Q.empty()){
        auto h = Q.front(); Q.pop();
        if(isOK(h)){
            cout << "YES\n" << (llt)h << endl;
            return;
        }
        if(h * k2 <= 1E18) Q.push(h * k2);
        if(h * k2 + 1 <= 1E18) Q.push(h * k2 + 1);
    }
    cout << "NO\n";
    return; 
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}